package com.wangxu.blog.config;

import com.wangxu.blog.handler.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * WebMvcConfigurer配置类其实是Spring内部的一种配置方式，
 * 采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制，
 * 可以自定义一些Handler，Interceptor，ViewResolver，MessageConverter。
 * 基于java-based方式的spring mvc配置，需要创建一个配置类并实现WebMvcConfigurer 接口；
 *  WebMvcConfigurer接口
 *   常用实现类:
 *      2.1 addInterceptors：拦截器
 *      2.2 addViewControllers：页面跳转
 *      2.3 addResourceHandlers：静态资源
 *      2.4 configureDefaultServletHandling：默认静态资源处理器
 *      2.5 configureViewResolvers：视图解析器
 *      2.6 configureContentNegotiation：配置内容裁决的一些参数
 *      2.7 addCorsMappings：跨域
 *      2.8 configureMessageConverters：信息转换器
 */
@Configuration
public class WebMVCConfig implements WebMvcConfigurer{

    @Autowired
    private LoginInterceptor loginInterceptor;

    /**
     * 设置跨域配置问题
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //设置跨域   设置允许访问的域名
        registry.addMapping("/**").allowedOrigins("http://localhost:8080");
    }

    /**
     * 配置拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                        .addPathPatterns("/test") //addPathPatterns():黑名单
                        .excludePathPatterns("/login") //excludePathPatterns():白名单
                        .excludePathPatterns("/register");
    }
}
